package jmine.tec.script.persistent.context;

import jmine.tec.script.ScriptExecutionContext;
import jmine.tec.script.ScriptExecutor;
import jmine.tec.script.ScriptParameters;
import jmine.tec.script.persistent.ScriptController;
import jmine.tec.script.persistent.domain.Script;

/**
 * Inferface que o contexto de execução de scripts persistidos precisa implementar. A interface permite que o contexto seja criado e
 * configurado pela fábrica de contextos. Veja também UserExecutionContext. A implementação deve ter um construtor que não recebe
 * parâmetros.
 * 
 * @author lundberg lundberg
 * @param <R> tipo de resultado retornado
 */
public interface PersistentScriptExecutionContext<R> extends ScriptExecutionContext<R> {

    /**
     * Define os parâmetros do script.
     * 
     * @param parameters the parameters to set
     */
    void setParameters(ScriptParameters parameters);

    /**
     * Define o script a ser executado pelo contexto
     * 
     * @param script script
     */
    void setScript(Script script);

    /**
     * Define a classe do executor do script.
     * 
     * @param executorClass the executorClass to set
     */
    void setExecutorClass(Class<? extends ScriptExecutor> executorClass);

    /**
     * Injeta o controller do módulo de scripts.
     * 
     * @param controller controller
     */
    void setScriptController(ScriptController controller);

    /**
     * Define a chave do dispatcher que deve ser utilizado para executar o script.
     * 
     * @param dispatcherKey dispatcherKey
     */
    void setDispatcherKey(String dispatcherKey);

    /**
     * Obtém a chave do dispatcher que deve ser utilizado para executar este script.
     * 
     * @return string
     */
    String getDispatcherKey();
}
